package org.lestr.secuel.noyau.systemeLogique.conditions;

import org.jdom.Element;

import org.lestr.secuel.m3ds.Variable;
import org.lestr.secuel.m3ds.VariableEcouteur;

public class ConditionVariable extends ConditionAbstraite implements VariableEcouteur {

	
	// Déclaration de constantes
	private static final long serialVersionUID = 1L;

	
	// Déclaration des attributs
	private Variable variable1;
	private Variable variable2;
	
	
	/** Constructeur */
	public ConditionVariable(){
		
		// Instanciation des attributs
		variable1 = null;
		variable2 = null;
		
		// Défini le nom de la collision
		setTypeNom("Variable");
		
	}// FIN Constructeur
	
	
	/** Défini la variable 1 */
	public void defVariable1(Variable variable){
		
		// Retire l'écoute de l'ancienne variable
		if((this.variable1 != null) && (variable != null) && (this.variable1 != variable))
			this.variable1.retraitEcouteur(this);
		
		// Mémorise la variable
		this.variable1 = variable;
		
		// L'écouteur
		variable1.ajoutEcouteur(this);
		
	}// FIN defVariable
	
	
	/** Retourne la variable 1 */
	public Variable retVariable1(){
	
		return variable1;
		
	}// FIN retVariable
	
	
	/** Défini la variable 2 */
	public void defVariable2(Variable variable){
		
		// Retire l'écoute de l'ancienne variable
		if((this.variable2 != null) && (variable != null) && (this.variable2 != variable))
			this.variable2.retraitEcouteur(this);
		
		// Mémorise la variable
		this.variable2 = variable;
		
		// L'écouteur
		variable2.ajoutEcouteur(this);
		
	}// FIN defVariable
	
	
	/** Retourne la variable 2 */
	public Variable retVariable2(){
	
		return variable2;
		
	}// FIN retVariable

	
	/** Une variable a changée de valeur */
	public void variableModifiée(Variable variable){
		
		// Variables locales
		boolean ancVraie;
		boolean vraie;
		
		// Mémorisation de l'actuelle valeur de vérité de la condition
		ancVraie = isVraie();
		vraie = ancVraie;
		
		// Si c'est la variable 1 ou deux
		if((variable == variable1) || (variable == variable2))
			vraie = variable1.getValeur().equals(variable2.getValeur());
		
		// Si la condition est devenue vrai
		if(!ancVraie && vraie)
			vraie();
		
		// Si la condition est devenue
		if(ancVraie && !vraie)
			fausse();
		
	}// FIN variableModifiée


	@Override
	public void charger(Element xml) {
		// TODO Auto-generated method stub
		
	}


	@Override
	public Element compiler() {
		// TODO Auto-generated method stub
		return null;
	}

	
}// FIN Classe
